/*
 * Copyright (C) 2020 xuexiangjys(xuexiangjys@163.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package com.xuexiang.xui_lib.component.button.shinebutton;

import com.xuexiang.xui_lib.component.button.shinebutton.interpolator.Ease;
import com.xuexiang.xui_lib.component.button.shinebutton.interpolator.EasingProvider;

import ohos.agp.animation.AnimatorValue;

/**
 * ShineAnimator
 *
 * @author xuexiang
 * @since 2020-01-06
 */
public class ShineAnimator extends AnimatorValue {
    private static final float DEFAULT_MAX_VALUE = 1.5f;
    private static final int DEFAULT_ANIM_DURATION = 1500;
    private static final int DELAY = 200;

    /**
     * ShineAnimator
     */
    public ShineAnimator() {
        setDuration(DEFAULT_ANIM_DURATION);
        setDelay(DELAY);
    }

    /**
     * ShineAnimator
     *
     * @param duration
     * @param maxValue
     * @param delay
     */
    public ShineAnimator(long duration, float maxValue, long delay) {
        setDuration(duration);
        setDelay(delay);
        setCurveInternal(new EasingInterpolator(Ease.QUART_OUT));

    }

    /**
     * EasingInterpolator
     *
     * @since 2021-04-26
     */
    static class EasingInterpolator implements TimelineCurve {

        private final Ease ease;

        EasingInterpolator(Ease ease) {
            this.ease = ease;
        }

        @Override
        public float getCurvedTime(float input) {
            return EasingProvider.get(this.ease, input);
        }

        public Ease getEase() {
            return ease;
        }
    }
}

